package cn.tedu._05weibo.controller;

import cn.tedu._05weibo.common.response.JsonResult;
import cn.tedu._05weibo.common.response.StatusCode;
import cn.tedu._05weibo.mapper.WeiboMapper;
import cn.tedu._05weibo.pojo.dto.WeiboDTO;
import cn.tedu._05weibo.pojo.entity.Weibo;
import cn.tedu._05weibo.pojo.vo.UserVO;
import cn.tedu._05weibo.pojo.vo.WeiboDetailVO;
import cn.tedu._05weibo.pojo.vo.WeiboIndexVO;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.hibernate.validator.constraints.Range;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;

import javax.servlet.http.HttpSession;
import java.util.Date;
import java.util.List;
import java.util.jar.JarEntry;

/**
 * 校验生命参数方式接收到数据时，一定要在控制器类上添加@Validated注解
 */
@Validated
@Api(tags = "02.微博模块")
@RestController
@RequestMapping("/v1/weibo/")
public class WeiboController {
    //自动装配
    @Autowired
    private WeiboMapper weiboMapper;

    /**
     *  1.发布微博功能
     */
    @ApiOperation("发微博功能")
   @PostMapping("insert")
     public JsonResult insert(@RequestBody WeiboDTO weiboDTO, @ApiIgnore HttpSession session){
       UserVO userVO =(UserVO) session.getAttribute("user");
       //拦截器中校验登录
//       if (userVO==null){//未登录
//           return new JsonResult(StatusCode.NOT_LOGIN);
//       }
       //将数据存入微博表
       Weibo weibo = new Weibo();
       BeanUtils.copyProperties(weiboDTO,weibo);
       weibo.setCreated(new Date());
       weibo.setUserId(userVO.getId());
       weiboMapper.insetWeibo(weibo);
         return JsonResult.ok();
     }

     /** 2.首页微博列表功能 */
     @ApiOperation(value = "首页微博列表功能")
     @GetMapping("selectIndex")
     public JsonResult selectIndex(){
         List<WeiboIndexVO> weiboIndexVOS = weiboMapper.selectIndex();
         return JsonResult.ok(weiboIndexVOS);
     }

     /** 3.微博详情页功能 */
     @ApiImplicitParams(value = {
             @ApiImplicitParam(name="id",value = "微博编号",required = true,dataType = "int"),
             @ApiImplicitParam(name="username",value = "用户名",required = true)
     })
     @ApiOperation(value = "微博详情页")
     @GetMapping("selectById")
    public JsonResult selectById(@Range(min = 200,max = 600,message = "微博编号必须在200-600之间") @RequestParam int id, String username){
         //手动抛出异常
         if (id<0){
             throw new IllegalArgumentException("ID值是无效的!");
         }
         WeiboDetailVO weiboIndexVO = weiboMapper.selectById(id);
         //username参数仅仅是为了测试Knife4j的注解，没有其他作用
         return JsonResult.ok(weiboIndexVO);
     }

}
